// 暴露给解释器的 API
package file

import (
	"lark/src/object"
	"your-interpreter/errors"
)

// 注册文件模块的内置函数
func Register(env *object.Environment) {
	env.Set("open", object.NewBuiltinFunction("open", openFile))
	env.Set("read", object.NewBuiltinFunction("read", readFile))
	env.Set("write", object.NewBuiltinFunction("write", writeFile))
	env.Set("close", object.NewBuiltinFunction("close", closeFile))
	// 其他文件操作函数...
}

// 打开文件的内置函数
func openFile(args ...object.Object) object.Object {
	if len(args) != 2 {
		return errors.New("错误: open() 需要两个参数: 文件名和模式")
	}

	filename, ok := args[0].(*object.String)
	if !ok {
		return errors.New("错误: 第一个参数必须是字符串")
	}

	mode, ok := args[1].(*object.String)
	if !ok {
		return errors.New("错误: 第二个参数必须是字符串")
	}

	file, err := Open(filename.Value, mode.Value)
	if err != nil {
		return errors.New("错误: 无法打开文件: " + err.Error())
	}

	// 包装为解释器中的文件对象
	return &object.File{Value: file}
}
